package com.bw.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bw.bean.DataBean;
import com.bw.service.DataBeanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 数据大屏控制器 - 提供各类业务数据统计接口
 * @author admin
 * @date 2025年09月23日 11:29
 */
@RestController
public class DataBeanController {
    @Autowired
    private DataBeanService dataBeanService;

    /**
     * 大屏接口1: 菜品活动优惠与排名统计  （柱状图+折线图）
     * 用途: 展示各菜品的活动优惠数据和排名情况，适用于横向对比图表
     * 大屏展示: 通常用于柱状图或折线图，显示菜品名称、优惠数据和排名
     */
    @RequestMapping("/s1")
    public JSONObject select1(){
        // 初始化响应对象
        JSONObject result = new JSONObject();
        result.put("status",0);
        result.put("msg","");

        // 构建数据结构
        JSONObject data = new JSONObject();
        result.put("data",data);
        JSONArray categories = new JSONArray();  // X轴分类（菜品名称）
        JSONArray series = new JSONArray();       // 数据系列
        data.put("categories",categories);
        data.put("series",series);

        // 创建第一个数据系列：菜品活动优惠
        JSONObject ser_object1 = new JSONObject();
        ser_object1.put("name","菜品活动优惠");
        JSONArray dataArray = new JSONArray();
        ser_object1.put("data",dataArray);

        // 创建第二个数据系列：排名
        JSONObject ser_object2 = new JSONObject();
        ser_object2.put("name","排名");
        JSONArray dataArray2 = new JSONArray();
        ser_object2.put("data",dataArray2);

        // 添加数据系列到主系列数组
        series.add(ser_object1);
        series.add(ser_object2);

        // 从服务层获取数据
        List<DataBean> beans = dataBeanService.select1();
        for (DataBean bean : beans) {
            categories.add(bean.getName());    // X轴分类数据（菜品名称）
            dataArray.add(bean.getCta());      // 菜品活动优惠数据
            dataArray2.add(bean.getCtb());     // 排名数据
        }

        return result;
    }

    /**
     * 大屏接口2: 订单详情统计表格  （普通表格+轮播表格）
     * 用途: 提供详细的订单统计数据，包括下单金额、次数、人数等
     * 大屏展示: 数据表格形式，支持排序和筛选，展示核心业务指标  轮播表格
     * 对应图片中的表格数据: 名称、下单金额、下单次数、下单人数、实际金额
     */
    @RequestMapping("/s2")
    public JSONObject select2(){
        JSONObject result = new JSONObject();
        result.put("status", 0); // 状态码，0表示成功
        result.put("msg", "");   // 消息内容，成功时为空

        // 创建数据对象
        JSONObject data = new JSONObject();
        result.put("data", data);

        // 创建列定义数组和数据行数组
        JSONArray columns = new JSONArray();
        JSONArray rows = new JSONArray();
        data.put("columns", columns);
        data.put("rows", rows);

        // 定义表格列信息 - 对应图片中的表格列
        JSONObject col1 = new JSONObject();
        col1.put("id", "name");   // 字段名
        col1.put("name", "名称");  // 显示中文名
        columns.add(col1);

        JSONObject col2 = new JSONObject();
        col2.put("id", "cta");         // 字段名
        col2.put("name", "下单金额");   // 显示中文名
        columns.add(col2);

        JSONObject col3 = new JSONObject();
        col3.put("id", "ctb");         // 字段名
        col3.put("name", "下单次数");   // 显示中文名
        columns.add(col3);

        JSONObject col4 = new JSONObject();
        col4.put("id", "ctc");         // 字段名
        col4.put("name", "下单人数");   // 显示中文名
        columns.add(col4);

        JSONObject col5 = new JSONObject();
        col5.put("id", "ctd");         // 字段名
        col5.put("name", "实际金额");   // 显示中文名
        columns.add(col5);

        JSONObject col6 = new JSONObject();
        col6.put("id", "cte");             // 字段名
        col6.put("name", "退款金额");   // 显示中文名
        columns.add(col6);

        // 从服务层获取数据并填充到行中
        List<DataBean> beans = dataBeanService.select2();
        for (DataBean bean : beans) {
            JSONObject row = new JSONObject();
            row.put("name", bean.getName());      // 名称
            row.put("cta", bean.getCta());        // 下单金额
            row.put("ctb", bean.getCtb());        // 下单次数
            row.put("ctc", bean.getCtc());        // 下单人数
            row.put("ctd", bean.getCtd());        // 实际金额
            row.put("cte", bean.getCte());        // 退款金额
            rows.add(row);
        }

        return result;
    }

    /**
     * 大屏接口3: 菜品评价统计  （普通表格+轮播表格）
     * 用途: 展示菜品的评价相关数据，包括评价次数、好评次数、平均评分和好评率
     * 大屏展示: 适用于评分卡片或雷达图，展示菜品口碑和质量
     */
    @RequestMapping("/s3")
    public JSONObject select3(){
        JSONObject result = new JSONObject();
        result.put("status", 0); // 状态码，0表示成功
        result.put("msg", "");   // 消息内容，成功时为空

        // 创建数据对象
        JSONObject data = new JSONObject();
        result.put("data", data);

        // 创建列定义数组和数据行数组
        JSONArray columns = new JSONArray();
        JSONArray rows = new JSONArray();
        data.put("columns", columns);
        data.put("rows", rows);

        // 定义表格列信息
        JSONObject col1 = new JSONObject();
        col1.put("id", "name");   // 字段名
        col1.put("name", "名称");  // 显示中文名
        columns.add(col1);

        JSONObject col2 = new JSONObject();
        col2.put("id", "ctb");         // 字段名
        col2.put("name", "评价次数");   // 显示中文名
        columns.add(col2);

        JSONObject col3 = new JSONObject();
        col3.put("id", "ctc");         // 字段名
        col3.put("name", "好评次数");   // 显示中文名
        columns.add(col3);

        JSONObject col4 = new JSONObject();
        col4.put("id", "ctd");         // 字段名
        col4.put("name", "平均评分");   // 显示中文名
        columns.add(col4);

        JSONObject col5 = new JSONObject();
        col5.put("id", "cte");         // 字段名
        col5.put("name", "好评率");   // 显示中文名
        columns.add(col5);

        // 从服务层获取数据并填充到行中
        List<DataBean> beans = dataBeanService.select3();
        for (DataBean bean : beans) {
            JSONObject row = new JSONObject();
            row.put("name", bean.getName());      // 菜品名称
            row.put("ctb", bean.getCtb());        // 评价次数
            row.put("ctc", bean.getCtc());        // 好评次数
            row.put("ctd", bean.getCtd());        // 平均评分
            row.put("cte", bean.getCte());        // 好评率
            rows.add(row);
        }

        return result;
    }

    /**
     * 大屏接口4: 多维度订单数据对比   （柱状图+折线图）
     * 用途: 提供下单金额、次数和人数的多维度对比数据
     * 大屏展示: 适用于组合图表，如柱状图+折线图，展示不同维度的订单数据关系
     */
    @RequestMapping("/s4")
    public JSONObject select4(){
        JSONObject result = new JSONObject();
        result.put("status", 0); // 状态码，0表示成功
        result.put("msg", "");   // 消息内容，成功时为空

        // 创建数据对象
        JSONObject data = new JSONObject();
        result.put("data", data);

        // 创建分类数组和数据系列数组
        JSONArray categories = new JSONArray();  // X轴分类（如时间、店铺等）
        JSONArray series = new JSONArray();      // 数据系列
        data.put("categories", categories);
        data.put("series", series);

        // 创建下单金额数据系列
        JSONObject series1 = new JSONObject();
        series1.put("name","下单金额");
        JSONArray dataArray1 = new JSONArray();
        series1.put("data",dataArray1);
        series.add(series1);

        // 创建下单次数数据系列
        JSONObject series2 = new JSONObject();
        series2.put("name","下单次数");
        JSONArray dataArray2 = new JSONArray();
        series2.put("data",dataArray2);
        series.add(series2);

        // 创建下单人数数据系列
        JSONObject series3 = new JSONObject();
        series3.put("name","下单人数");
        JSONArray dataArray3 = new JSONArray();
        series3.put("data",dataArray3);
        series.add(series3);

        // 从服务层获取数据并填充
        List<DataBean> beans = dataBeanService.select4();
        for (DataBean bean : beans) {
            categories.add(bean.getName());      // X轴分类数据
            dataArray1.add(bean.getCta());       // 下单金额数据
            dataArray2.add(bean.getCtb());       // 下单次数数据
            dataArray3.add(bean.getCtc());       // 下单人数数据
        }
        return result;
    }
}